﻿###################################################
## Sully Bloodline Contract
## laamp_regula_sully_bloodline
##
## Criminal contract: A rival dynasty member hires the player to infiltrate
## a target noble house and bed multiple female members in a single night,
## sullying their bloodline. Uses a scheme-driven looping event pattern.
###################################################

laamp_regula_sully_bloodline = {
	group = laamp_contracts_criminal_group
	icon = "gfx/interface/icons/task_contracts/regula_icon_task_contract_sully_bloodline.dds"

	is_criminal = yes
	travel = no
	use_diplomatic_range = no

	weight = {
		# Standard weights.
		value = task_contract_weight_default_value
		add = laamp_contracts_weight_up_criminal_value
		add = laamp_contracts_weight_up_regula_value
		add = task_contract_weight_interesting_very_rare_value
		add = task_contract_weight_interesting_somewhat_rare_value
		# Employer weights.
		scope:employer = {
			add = {
				# Weight up — traits associated with rivalry and vengefulness.
				if = {
					limit = { has_trait = vengeful }
					add = task_contract_weight_bonus_employer_has_associated_traits_value
				}
				if = {
					limit = { has_trait = ambitious }
					add = task_contract_weight_bonus_employer_has_associated_traits_value
				}
				if = {
					limit = { has_trait = deceitful }
					add = task_contract_weight_bonus_employer_has_associated_traits_value
				}
				if = {
					limit = { has_trait = wrathful }
					add = task_contract_weight_bonus_employer_has_associated_traits_value
				}
				# Weight down — traits associated with forgiveness and passivity.
				if = {
					limit = { has_trait = forgiving }
					add = task_contract_weight_malus_employer_has_associated_traits_value
				}
				if = {
					limit = { has_trait = content }
					add = task_contract_weight_malus_employer_has_associated_traits_value
				}
				if = {
					limit = { has_trait = compassionate }
					add = task_contract_weight_malus_employer_has_associated_traits_value
				}
				# Restrictions.
				min = task_contract_weight_employer_associated_traits_min_value
				max = task_contract_weight_employer_associated_traits_max_value
			}
			multiply = task_contract_weight_by_tier_value
			# This weight is an override, so make sure it's placed at the bottom.
			add = task_contract_weight_employer_contact_list_value
		}
	}

	# Validity Triggers
	valid_to_create = {
		# Game rule gate — respect lewd contract availability setting.
		regula_lewd_contracts_available_trigger = yes
		# Standard triggers.
		valid_laamp_basic_trigger = {
			EMPLOYER = scope:employer
			LAAMP = root
		}
		employer_has_treasury_to_offer_job_trigger = yes
		valid_laamp_sensible_start_trigger = yes

		# Employer must be at least a Count
		scope:employer.highest_held_title_tier >= tier_county

		# Custom: employer must have a valid target lord (representing a dynasty) available via relations/neighbors.
		scope:employer = {
			regula_sully_valid_employer_trigger = yes
		}
	}

	valid_to_accept = {
		# Standard triggers.
		valid_laamp_basic_accept_only_trigger = yes
		valid_laamp_basic_trigger = {
			EMPLOYER = scope:employer
			LAAMP = root
		}
		scope:employer = { is_landed = yes }
		OR = {
			carn_is_futa_trigger = yes
			is_male = yes
		}
	}

	valid_to_continue = {
		# Standard triggers.
		valid_laamp_basic_trigger = {
			EMPLOYER = root.task_contract_employer
			LAAMP = root.task_contract_taker
		}
		task_contract_employer = { is_landed = yes }
	}

	valid_to_keep = {
		# Standard triggers.
		valid_laamp_basic_trigger = {
			EMPLOYER = root.task_contract_employer
			LAAMP = root.task_contract_taker
		}
		task_contract_employer = { is_landed = yes }
	}

	on_create = {
		scope:contract = {
			save_scope_as = task_contract

			# Select a valid target lord for the employer.
			task_contract_employer = {
				save_scope_as = task_contract_employer
				regula_sully_select_target_lord_effect = yes
			}

			# Store target lord and employer as contract variables.
			set_task_contract_target = scope:target_lord
			set_variable = {
				name = task_contract_employer
				value = scope:task_contract_employer
			}
			set_variable = {
				name = target_lord
				value = scope:target_lord
			}
		}
	}

	# On_Actions
	on_accepted = {
		task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_accept_contract" }
		# Build the eligible women list for the intro event.
		save_scope_as = task_contract
		# Initialize the bedded_women list (empty) so triggers can check it safely.
		clear_variable_list = bedded_women
		# Initialize gold accumulator
		set_variable = {
			name = gold_earned
			value = 0
		}
		var:target_lord = {
			save_scope_as = target_lord
			regula_sully_build_eligible_women_list_effect = yes
		}
		task_contract_taker ?= {
			trigger_event = regula_sully_contract_event.0001
		}
	}

	on_invalidated = {
		if = {
			limit = {
				root.task_contract_taker = {
					any_character_active_contract = {
						this = root
					}
				}
			}
			task_contract_employer = {
				save_scope_as = task_contract_employer
			}
			save_scope_value_as = {
				name = task_contract_tier
				value = root.task_contract_tier
			}
			var:target_lord = {
				save_scope_as = target_lord
			}
			task_contract_taker = {
				set_variable = {
					name = invalidated_task_contract_type
					value = flag:laamp_regula_sully_bloodline
				}
			}

			if = {
				limit = {
					task_contract_employer = {
						is_alive = no
					}
				}
				task_contract_employer.primary_title.holder ?= {
					save_scope_as = employer_heir
				}
				task_contract_taker = {
					save_scope_value_as = {
						name = task_contract_invalidation_reason
						value = flag:employer_dead
					}
					trigger_event = regula_sully_contract_event.0082
				}
			}
			else_if = {
				limit = {
					scope:target_lord = {
						is_alive = no
					}
				}
				task_contract_taker = {
					save_scope_value_as = {
						name = task_contract_invalidation_reason
						value = flag:target_lord_dead
					}
					trigger_event = regula_sully_contract_event.0081
				}
			}
		}
	}

	# Rewards
	task_contract_reward = {
		success_standard = {
			should_print_on_complete = yes
			effect = {
				custom_tooltip = regula_sully_contract_rewards_tt
				task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
				save_scope_as = task_contract
				# Camp building extra Criminal Rewards: +50%.
				if = {
					limit = {
						task_contract_taker.domicile ?= { has_domicile_parameter = camp_improved_criminal_contract_rewards }
					}
					save_scope_value_as = { name = extra_reward value = flag:yes }
				}
				else = {
					save_scope_value_as = { name = extra_reward value = flag:no }
				}
				laamp_rewards_disburse_ordinary_currency_effect = {
					GOLD = scope:task_contract.var:gold_earned
					PRESTIGE = task_contract_success_prestige_gain_full_value
					PIETY = 0
					PROVISIONS = task_contract_success_provisions_gain_medium_value
					OPINION = task_contract_opinion_standard_reward_value
					OPINION_TYPE = succeeded_task_contract_opinion
					CONTACT = no
					CONTACT_HOOK = no
					EXTRA_REWARD = scope:extra_reward
				}
				# Target lord hates you for the criminal contract against them.
				var:target_lord = {
					add_opinion = {
						target = root.task_contract_taker
						modifier = succeeded_criminal_contract_against_me_opinion
						opinion = -60
					}
				}
				# Update gallowsbait score.
				task_contract_taker = {
					laamp_rewards_apply_criminal_xp_effect = {
						TRACK = trickster
						XP_MAX = gallowsbait_xp_medium_gain
						XP_MIN = gallowsbait_xp_medium_gain
					}
				}
				# Track regula contract completion.
				task_contract_regula_contract_tracker_effect = yes
			}
		}
		success_qualified = {
			should_print_on_complete = yes
			effect = {
				custom_tooltip = regula_sully_contract_rewards_tt
				task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_success_on_contract" }
				save_scope_as = task_contract
				save_scope_value_as = { name = extra_reward value = flag:no }
				laamp_rewards_disburse_ordinary_currency_effect = {
					GOLD = scope:task_contract.var:gold_earned
					PRESTIGE = task_contract_success_prestige_gain_half_value
					PIETY = 0
					PROVISIONS = task_contract_success_provisions_gain_minor_value
					OPINION = task_contract_opinion_standard_reward_value
					OPINION_TYPE = succeeded_task_contract_opinion
					CONTACT = no
					CONTACT_HOOK = no
					EXTRA_REWARD = scope:extra_reward
				}
				# Target lord hates you for the criminal contract against them.
				var:target_lord = {
					add_opinion = {
						target = root.task_contract_taker
						modifier = succeeded_criminal_contract_against_me_opinion
						opinion = -60
					}
				}
				# Update gallowsbait score (reduced).
				task_contract_taker = {
					laamp_rewards_apply_criminal_xp_effect = {
						TRACK = trickster
						XP_MAX = gallowsbait_xp_minor_gain
						XP_MIN = gallowsbait_xp_minor_gain
					}
				}
				# Track regula contract completion.
				task_contract_regula_contract_tracker_effect = yes
			}
		}
		failure_standard = {
			positive = no
			should_print_on_complete = yes
			effect = {
				custom_tooltip = regula_sully_contract_rewards_tt
				task_contract_taker = { play_sound_effect = "event:/DLC/EP3/SFX/UI/Contracts/ep3_ui_contracts_failure_on_contract" }
				save_scope_as = task_contract
				save_scope_value_as = { name = extra_reward value = flag:no }
				# Caught — only get half the gold earned.
				save_scope_value_as = {
					name = failure_gold
					value = {
						value = scope:task_contract.var:gold_earned
						multiply = 0.5
					}
				}
				laamp_rewards_disburse_ordinary_currency_effect = {
					GOLD = scope:failure_gold
					PRESTIGE = task_contract_failure_prestige_loss_crime_value
					PIETY = 0
					PROVISIONS = task_contract_failure_provisions_gain_minor_value
					OPINION = task_contract_opinion_crime_failure_value
					OPINION_TYPE = attempted_criminal_contract_against_me_opinion
					CONTACT = no
					CONTACT_HOOK = no
					EXTRA_REWARD = scope:extra_reward
				}
				# Update gallowsbait score (reduced).
				task_contract_taker = {
					laamp_rewards_apply_criminal_xp_effect = {
						TRACK = trickster
						XP_MAX = gallowsbait_xp_minor_gain
						XP_MIN = gallowsbait_xp_minor_gain
					}
				}
			}
		}
	}
}
